package com.crazy.generate.code;

import org.jboss.forge.roaster.Roaster;
import org.jboss.forge.roaster.model.JavaInterface;
import org.jboss.forge.roaster.model.source.JavaClassSource;
import org.jboss.forge.roaster.model.source.JavaDocSource;
import org.jboss.forge.roaster.model.source.JavaInterfaceSource;

import java.io.Serializable;

/**
 * @author panyonghui
 * @describe
 * @date 2022/8/20 20:49
 */
public class TestGenerateCode {

    public static void main(String[] args) {
        // 创建interface接口
        final JavaInterfaceSource javaInterface = Roaster.create(JavaInterfaceSource.class);
        // 创建class
        final JavaClassSource javaClass = Roaster.create(JavaClassSource.class);
        // 添加包名
        javaClass.setPackage("com.crazy.generate.code").setName("TestJavaFile");

        // 创建注释
        JavaDocSource javaDoc = javaClass.getJavaDoc();
//        javaDoc.setFullText("Full class documentation");
// or
        javaDoc.setText("测试代码生成");
        javaDoc.addTagValue("@author","panyh");


        // 添加继承
//        javaClass.setSuperType(CommonResponse.class);
        javaClass.setSuperType("CommonResponse");
        // 添加引入包名
        javaClass.addImport("com.crazy.entity.CommonResponse");

        // 添加接口
        javaClass.addInterface(Serializable.class);
        // 添加属性
        javaClass.addField()
                .setName("serialVersionUID")
                .setType("long")
                .setLiteralInitializer("1L")
                .setPrivate()
                .setStatic(true)
                .setFinal(true);

        javaClass.addProperty(Integer.class, "id").setMutable(false);
        javaClass.addProperty(String.class, "firstName");
        javaClass.addProperty("String", "lastName");

        // 添加方法
        javaClass.addMethod()
                .setConstructor(true)
                .setPublic()
                .setBody("this.id = id;")
                .addParameter(Integer.class, "id");


//        System.out.println(javaClass);
        // 格式化代码
        String formattedCode = Roaster.format(String.valueOf(javaClass));
        System.out.println(formattedCode);
    }

}
